const article = {
  prefix: "/article",

  /**
   * 根据用户id和关键词获取文章列表以及文章总数
   * @param {Integer} aid  文章作者id,留空时获取所有文章
   * @param {String} keyWord 关键词,可留空
   * @param {Integer} page 页数
   * @param {Integer} size 每页大小
   * @returns {import("axios").AxiosRequestConfig}
   */
  getArticleList(aid = null, keyWord = null, page = 1, size = 10) {
    let params = {
      page: page,
      size: size,
    };
    if (aid) {
      params.aid = aid;
    }
    if (keyWord) {
      params.keyWord = keyWord;
    }
    return {
      url: `${this.prefix}`,
      params: params,
    };
  },

  /**
   * 根据用户id和文章类型获取文章列表及其总数
   * @param {Integer} aid 文章作者id，可留空
   * @param {String} type 文章类型
   * @param {Integer} page 页数
   * @param {Integer} size 每页大小
   * @returns {import("axios").AxiosRequestConfig}
   */
  getArticleListByType(aid = null, type, page = 1, size = 10) {
    let params = {
      page: page,
      size: size,
    };
    if (aid) {
      params.aid = aid;
    }
    if (type) {
      params.type = type;
    }
    return {
      url: `${this.prefix}/type/${type}`,
      params: params,
    };
  },

  /**
   * 获取草稿箱中的文章列表
   * @param {Integer} aid 作者id
   * @param {Integer} page 页数
   * @param {Integer} size 每页大小
   * @returns {import("axios").AxiosRequestConfig}
   */
  getDraftsList(aid, page = 1, size = 10) {
    let params = {
      aid: aid,
      page: page,
      size: size,
    };
    return {
      url: `${this.prefix}/drafts`,
      params: params,
    };
  },

  /**
   * 保存文章
   * @param {Article} article 文章对象
   */
  saveArticle(article) {
    return {
      method: "post",
      url: `${this.prefix}/drafts`,
      data: article,
    };
  },

  /**
   * 获取未保存到数据库的文章封面
   * @param {Integer} id 文章id
   * @param {String} suffix 文件后缀名
   * @returns {import("axios").AxiosRequestConfig}
   */
  getCover(id, suffix) {
    let fileName = id + "." + suffix;
    let params = {
      id: id,
      fileName: fileName,
    };
    return {
      url: `${this.prefix}/cover`,
      params: params,
    };
  },

  /**
   * 删除封面
   * @param {String} fileName 文件名
   */
  deleteCover(fileName) {
    let params = {
      fileName: fileName,
    };
    return {
      method: "delete",
      url: `${this.prefix}/cover`,
      params: params,
    };
  },

  /**
   * 根据文章id获取文章封面
   * @param {Integer} id 文章id
   * @returns {import("axios").AxiosRequestConfig}
   */
  getCover1(id) {
    return {
      url: `${this.prefix}/cover${id ? "/" + id : ""}`,
    };
  },

  /**
   * 根据文章id设置封面
   * @param {File} file 图片文件
   * @param {Integer} id 文章id
   * @returns {import("axios").AxiosRequestConfig}
   */
  uploadCover(file, id) {
    const fd1 = new FormData();
    fd1.append("file", file);
    fd1.append("id", id);
    return {
      method: "post",
      url: `${this.prefix}/cover`,
      data: fd1,
      headers: {
        "Content-Type": "multipart/form-data;charset=UTF-8",
      },
    };
  },

  /**
   * 获取根据标签出现次数倒序排序的类型列表
   * @returns {import("axios").AxiosRequestConfig}
   */
  getDescTypeList() {
    return {
      url: `${this.prefix}/cloud`,
    };
  },

  /**
   * 获取文章图片
   * @param {String} fileName 文件名
   * @param { int } id 文章id
   * @returns {import("axios").AxiosRequestConfig}
   */
  getArticleImage() {
    return {
      url: `${this.prefix}/articleImage`,
    };
  },

  /**
   * 删除文章图片
   * @param {String} fileName 文件名
   * @param {Integer} id 文章id
   * @returns {import("axios").AxiosRequestConfig}
   */
  deleteArticleImage(fileName, id) {
    let params = {
      fileName: fileName,
      id: id,
    };
    return {
      method: "delete",
      url: `${this.prefix}/articleImage`,
      params: params,
    };
  },

  /**
   * 上传文章图片
   */
  uploadArticleImage(file, id) {
    const fd = new FormData();
    fd.append("file", file);
    fd.append("id", id);
    return {
      method: "post",
      url: `${this.prefix}/articleImage`,
      data: fd,
      headers: {
        "Content-Type": "multipart/form-data;charset=UTF-8",
      },
    };
  },

  /**
   * 获取目前文章中最大的id
   * @returns {import("axios").AxiosRequestConfig}
   */
  getMaxArticleId() {
    return {
      url: `${this.prefix}/maxId`,
    };
  },

  /**
   * 发表文章
   */
  addArticle(article) {
    return {
      method: "post",
      url: `${this.prefix}`,
      data: article,
    };
  },

  /**
   * 删除文章
   */
  deleteArticle(article) {
    return {
      method: "delete",
      url: `${this.prefix}`,
      data: article,
    };
  },

  /**
   * 批量删除文章
   * @param {ArrayList<Integer>} list  文章id列表
   */
  batchDeleteArticle(list) {
    return {
      method: "delete",
      url: `${this.prefix}/batchDelete`,
      data: list,
    };
  },

  /**
   * 获取文章具体内容
   * @param {Integer} id 文章id
   * @returns {import("axios").AxiosRequestConfig}
   */
  getArticleContent(id) {
    return {
      url: `${this.prefix}/${id}`,
    };
  },

  /**
   * 给文章点赞
   * @param {Integer} id 文章id
   * @returns {import("axios").AxiosRequestConfig}
   */
  thumbsUp(id) {
    return {
      url: `${this.prefix}/up/${id}`,
    };
  },

  /**
   * 获取最后更新时间
   * @param {Integer} id  用户id
   * @returns {import("axios").AxiosRequestConfig}
   */
  getLastUpdateTime(id) {
    return {
      url: `${this.prefix}/date/${id}`,
    };
  },

  /**
   * 获取总点赞数
   * @param {Integer} id 用户id
   * @returns {import("axios").AxiosRequestConfig}
   */
  getSumLikes(id) {
    return {
      url: `${this.prefix}/sum/${id}`,
    };
  },
};

export default article;
